package com.hy.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hy.entity.SysPoint;
import com.hy.entity.SysPoint;
import com.hy.mapper.SysPointsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class SysPointsServiceImpl implements SysPointsService {
    @Autowired
    private SysPointsMapper sysPointsMapper;

    /**
     * 分页获取用户积分列表
     * @param pageNum 页码，默认值为1，用于指定查询的页面
     * @param pageSize 每页数量，默认值为10，用于指定每页显示的记录数
     * @return 封装了用户积分列表分页数据的Result对象
     */
    @Override
    public Object getUserPointsList(Integer pageNum, Integer pageSize) {
        Page<SysPoint> page = new Page<>(pageNum, pageSize);
        LambdaQueryWrapper<SysPoint> queryWrapper = new LambdaQueryWrapper<>();
        // 只查询未删除的记录
        queryWrapper.eq(SysPoint::getDeleteFlag, 0);

        return sysPointsMapper.selectPage(page, queryWrapper);
    }

    /**
     * 手动调整用户积分
     * @param userId 用户ID，用于定位需要调整积分的用户
     * @param adjustment 积分调整量，正数增加积分，负数减少积分
     * @return 操作成功提示的Result对象
     */
    @Override
    public void adjustUserPoints(Long userId, Long adjustment) {
        LambdaQueryWrapper<SysPoint> queryWrapper = new LambdaQueryWrapper<>();
        // 根据用户ID和未删除条件查询
        queryWrapper.eq(SysPoint::getUserId, userId)
                .eq(SysPoint::getDeleteFlag, 0);

        SysPoint points = sysPointsMapper.selectOne(queryWrapper);
        if (points != null) {
            // 使用正确的字段名和 Lombok 自动生成的 getter/setter
            points.setPointsNumbers(points.getPointsNumbers() + adjustment);
            points.setUpdateTime(new Date());
            sysPointsMapper.updateById(points);
        } else {
            // 如果用户没有积分记录，创建一条新记录
            SysPoint newPoints = new SysPoint();
            newPoints.setUserId((long) userId.intValue()); // 注意：实体类中 userId 是 Integer 类型
            newPoints.setPointsNumbers(adjustment);
            newPoints.setDeleteFlag(0);
            newPoints.setCreateTime(new Date());
            newPoints.setUpdateTime(newPoints.getCreateTime());
            sysPointsMapper.insert(newPoints);
        }
    }
}